using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 12/5/2013 9:52:03 AM
    /// </summary>
    [Serializable]
    public class DirectorSubDirLista : ReadOnlyListBase<DirectorSubDirLista, DirectorSubDirInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(DirectorSubDirLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static DirectorSubDirLista GetDirectorSubDirLista()
        {
            return DataPortal.Fetch<DirectorSubDirLista>();
        }
        public static DirectorSubDirLista GetDirectorSubDirLista(string idPersona)
        {
            return DataPortal.Fetch<DirectorSubDirLista>(idPersona);
        }
        private DirectorSubDirLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch()
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
            {
                new Parametro("ec_per_id", "")
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_DIRECTOR\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(DirectorSubDirInfo.GetDirectorSubDirInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        private void DataPortal_Fetch(string id)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro>
            {
                new Parametro("ec_per_id", id)
            };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_DIRECTOR\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(DirectorSubDirInfo.GetDirectorSubDirInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }
        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 12/5/2013 9:52:03 AM
    /// </summary>
    [Serializable]
    public class DirectorSubDirInfo : ReadOnlyBase<DirectorSubDirInfo>
    {
        #region Business Methods
        public Guid PersonaId { get; internal set; }
        public string Nombre { get; internal set; }
        public string Apellido { get; internal set; }
        public string Identificacion { get; internal set; }
        public string Direccion { get; internal set; }
        public string Email { get; internal set; }
        public string Rol { get; internal set; }
        public string RolCodigo { get; internal set; }
       
        #endregion

        #region Factory Methods

        internal static DirectorSubDirInfo GetDirectorSubDirInfo(DataRow childData)
        {
            return DataPortal.FetchChild<DirectorSubDirInfo>(childData);
        }

        private DirectorSubDirInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            // rol_codigo     
           
            PersonaId = Guid.Parse(childData["per_id"].ToString());          
            Apellido = childData["per_apellido"].ToString();
            Nombre = childData["per_nombre"].ToString();
            Identificacion = childData["per_identificacion"].ToString();
            Direccion = childData["per_direccion"].ToString();
            Email = childData["per_email"].ToString();
            Rol = childData["rol_nombre"].ToString();
            RolCodigo = childData["rol_codigo"].ToString();
          
        }

        #endregion
    }
}
